[C/C++] 函數指標

前言

最近在看《指標的藝術》,看能不能對於指標理解透徹一點。其中看到了函數指標,發覺是個很有趣的東西。

函數指標

顧名思義,就是一個指向函數的指標,那有什麼用途?直接看一段程式碼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
int add(int x, int y){
return x + y ;
}
int sub(int x, int y){
return x - y ;
}
int main()
{
int a = 5 , b = 3 , c ;
int (*operation)(int , int) ;
operation = add ;
c = (*operation)(a , b) ;
printf("a + b = %d\n", c ) ;
operation = sub ;
c = (*operation)(a , b) ;
printf("a + b = %d\n", c ) ;
return 0;
}

最後得到結果個別是82,可以發現函數指標可以像是變數一樣的使用,不過本質上還是指向函數的位置,型態和參數都要匹配才可以。

但要注意優先權的關係,有沒有括弧會不一樣。

1
2
int *operation(int , int) ;
int (*operation)(int , int) ;

前者是回傳一個指向int的指標,後者才是指向函數的指標。